In developing Web applications, developers often use JavaScript. JavaScript is a language standard that is typically used to enable programmatic access to computational objects within a host environment. It may be characterized as a prototype-based object-oriented scripting language that is dynamic, weakly typed and has first-class functions. JavaScript is primarily used in the form of client-side JavaScript, implemented as part of a Web browser in order to provide enhanced user interfaces and dynamic websites.
In developing JavaScript applications, developers may choose from multiple JavaScript frameworks. Examples of JavaScript frameworks are Dojo, Yahoo! User Interface (YUI), and others. Generally speaking, a framework is an abstraction in which common code providing generic functionality can be selectively overridden or specialized by user code providing specific functionality. Frameworks are a special case of software libraries in that they are reusable abstractions of code wrapped in a well-defined application programming interface (API), yet they contain some key distinguishing features that separate them from normal libraries. Among these distinguishing features are inversion of control (e.g., in a framework, unlike in libraries or normal user applications, the overall program's flow of control is not dictated by the caller, but by the framework), default behavior (e.g., a framework has a default behavior), extensibility (e.g., a framework can be extended by the user usually by selective overriding or specialized by user code providing specific functionality, and non-modifiable framework code (e.g., framework code, in general, is not allowed to be modified; users can extend the framework, but not modify its code).
Despite the many choices of frameworks, developers are often not able to determine which of the frameworks may be more desirable to use (e.g., which framework will execute faster, the number of inputs required, the number of constraints, etc.).